using System;
using System.Reflection;
using Microsoft.Practices.Unity;

namespace Unity.Extensions
{
    public interface IInterceptionConfiguration : IUnityContainerExtensionConfigurator
    {
        void InterceptInterface<T>(MethodInfo interfaceMethod,
                                   params IInterceptionHandler[] handlers);

        void InterceptInterface(Type typeToIntercept,
                                MethodInfo interfaceMethod,
                                params IInterceptionHandler[] handlers);

        void InterceptRemoting<T>(MethodInfo method,
                                  params IInterceptionHandler[] handlers);

        void InterceptRemoting(Type typeToIntercept,
                               MethodInfo method,
                               params IInterceptionHandler[] handlers);

        void InterceptVirtual<T>(MethodInfo method,
                                 params IInterceptionHandler[] handlers);

        void InterceptVirtual(Type typeToIntercept,
                              MethodInfo method,
                              params IInterceptionHandler[] handlers);
    }
}